package com.sqs.utils;

import io.jsonwebtoken.*;
import io.jsonwebtoken.io.Decoders;
import io.jsonwebtoken.security.Keys;

import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Date;
import java.util.Map;

public class JwtUtil {

    /**
     * 生成 JWT
     * @param secretKey Base64 编码的 256 位（32 字节）密钥字符串
     * @param claims    自定义声明
     * @return
     */
    public static String createJWT(String secretKey, Map<String, Object> claims) {
        // 1. 直接通过 Decoders 处理 Base64 密钥
        SecretKey key = Keys.hmacShaKeyFor(Decoders.BASE64.decode(secretKey));

        // 2. 使用新版流式 API 构建
        return Jwts.builder()
                .claims(claims)  // 新版 API
                .signWith(key)   // 自动推断算法
                .compact();
    }

    /**
     * 解析 JWT
     * @param secretKey Base64 编码的 256 位（32 字节）密钥字符串
     * @param token     JWT 字符串
     * @return
     */
    public static Claims parseJWT(String secretKey, String token) {
        // 1. 统一使用 Decoders 处理密钥
        SecretKey key = Keys.hmacShaKeyFor(Decoders.BASE64.decode(secretKey));

        // 2. 新版链式调用
        return Jwts.parser()
                .verifyWith(key)     // 替换旧版 setSigningKey
                .build()
                .parseSignedClaims(token)
                .getPayload();
    }
}
